# arm linux windows
BUILD_TYPE ?= linux

# 颜色
RED := \033[0;31m
GREEN := \033[0;32m
BLUE := \033[0;34m
NC := \033[0m

CC := gcc
CROSS_COMPILE ?= 

# mzk-log
LOG = mzk-log
LOG_SRC_DIR = ./lib/mzk-log/src
LOG_LIB = $(LOG_SRC_DIR)/lib$(LOG).a
#LOG_LIB = $(LOG_SRC_DIR)/lib$(LOG).so
$(LOG):
	@$(MAKE) -C $(LOG_SRC_DIR) BUILD_TYPE=$(BUILD_TYPE) 
CFLAGS += -I$(LOG_SRC_DIR) 

# lvgl
LVGL = lvgl
LVGL_SRC_DIR = ./lib/lvgl
LVGL_LIB = $(LVGL_SRC_DIR)/lib$(LVGL).a
$(LVGL):
	@$(MAKE) -C $(LVGL_SRC_DIR) BUILD_TYPE=$(BUILD_TYPE) 

CFLAGS += -I. \
            -I$(LVGL_SRC_DIR)/ \
            -I$(LVGL_SRC_DIR)/lvgl \
            -I$(LVGL_SRC_DIR)/lvgl/src \
# freetype 库头文件
CFLAGS += -I./lib/freetype/include/freetype2/
# rabbitmq-c 库头文件
CFLAGS += -I./lib/rabbitmq/include/

# 库路径
LDFLAGS := -L./lib/lvgl \
            -L./lib/freetype/$(BUILD_TYPE) \
            -L./lib/rabbitmq/$(BUILD_TYPE) \
			-L$(LOG_SRC_DIR) \

# 库文件
LDFLAGS += -llvgl \
		   -l$(LOG) \
            -lfreetype \
            -lz \
            -lbz2 \
            -lharfbuzz \
            -lfontconfig \
            -lpng \
            -lpthread \
            -lrabbitmq \
            -lwayland-client \
            -lwayland-cursor \
            -lxkbcommon \
            -lSDL2 \
			-lrt

# 包含用户 源文件 和 头文件 路径
include ./src/src.mk
APP_OBJS := $(MAINSRC:.c=.o)
APP_TARGET := app
$(APP_TARGET): $(APP_OBJS)  
	@printf "$(NC)$(RED)CROSS_COMPILE: $(CROSS_COMPILE) build type: $(BUILD_TYPE)$(NC)\n"
	@$(CROSS_COMPILE)$(CC) $^ -o $@ $(CFLAGS) $(LDFLAGS)
	@echo "Archiving: ./$(APP_TARGET)"
	@echo "Done ok !"

# 编译源文件
%.o: %.c
	@printf "$(BLUE)Building: $(CROSS_COMPILE)$(CC) $(NC)$(GREEN)$@$(NC)\n"
	@$(CROSS_COMPILE)$(CC) $(CFLAGS) -c $< -o $@ $(LDFLAGS)


all: $(LVGL) $(LOG) $(APP_TARGET) 

# 清理编译生成的文件
cleanapp:
	@echo "clean $(APP_TAEGET) $(APP_OBJS)"
	@rm -rf $(APP_TARGET) $(APP_OBJS) 
cleanlvgl:
	@$(MAKE) -C $(LVGL_SRC_DIR) clean
cleanlog:
	$(MAKE) -C $(LOG_SRC_DIR) clean
clean:
	@echo "Clean all"
	@rm -f $(APP_TARGET) $(APP_OBJS)
	@$(MAKE) -C $(LOG_SRC_DIR) clean
	@$(MAKE) -C $(LVGL_SRC_DIR) clean

# 伪目标，确保在编译前执行
.PHONY: all clean
